草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 公共(public)基类的派生类的 TypeID

我正试图在C++中实现某种机制,从而为从公共(public)基类派生的所有类分配一个唯一的“类ID”。例如:classBaseClass{//...public:unsignedintGetID(void);//...};classDerivedClass:publicBaseClass{}DerivedClass类和BaseClass的所有其他子类应该能够返回唯一标识符,而无需向DerivedClass添加任何额外代码……然而,C++使这对我来说相当困难。任何想法将不胜感激。提前致谢!---丹 最佳答案 你应该听听Alf的话:)这

c++ - 嵌套类型作为基类的模板参数

这可能吗?例子:templateclassA{};classB:publicA{public:structC{};};问题是B::C是未声明的标识符(原因很明显),我不知道如何让它工作。总结:B可以从A派生,模板参数设置为C吗? 最佳答案 没有。B在这一点上是不完整的,因为您还没有定义它应该继承的类。因此,不可能在此处引用B::C(嵌套类/结构取决于其封闭类/结构的完整定义,因为嵌套类型可能而且通常确实取决于附上一个)。 关于c++-嵌套类型作为基类的模板参数,我们在StackOverf

c++ - 抽象基类定义

这可以是抽象基类的定义吗:“仅包含纯虚方法,通常用作派生类的接口(interface)规范”或者抽象基类也可以包含其他方法(也是虚拟的) 最佳答案 根据C++标准的定义(§10.4,抽象类,强调我的):Anabstractclassisaclassthatcanbeusedonlyasabaseclassofsomeotherclass;noobjectsofanabstractclasscanbecreatedexceptassubobjectsofaclassderivedfromit.Aclassisabstractifith

c++ - 派生类与基类的 std::shared_ptr 的使用

下面的方法好不好?classTA{};classTB:TA{};std::shared_ptrspta;spta.reset(newTB); 最佳答案 显示的代码有一个问题,TB必须公开继承自TA.你有一个shared_ptr,所以你想要存储在其中的指针必须可以转换为TA,但带有private继承,基础不可访问,因此您的代码将无法编译。classTA{};classTB:publicTA{};除此之外,代码没有错误并且运行良好。通常,通过基类指针对派生类实例进行多态删除时,需要基类的析构函数为virtual。所以派生类析构函数被调用

c++ - 在具有存储基成员的基类的派生类中使用/存储派生成员

我经常遇到的情况是有一组类,Base和Derived,其中Base类拥有基类成员的所有权BaseMember,和Derived类具有指向同一对象的引用或指针,但作为DerivedMember.例如,包含具有某些特殊控制功能的某类控件的特定实例的UI面板类继承自包含通用控件并具有通用控制功能的通用类。首先说BaseMember由DerivedMemeber继承.如果不使用智能指针,我可能会这样做:classBase{protected://receiveownershipbutonlybecausewesayso,//someoneelsecanstilltrytodeleteasit'

c++ - 基类重载方法的访问声明

鉴于我们在基类中有重载方法,并且派生类被继承为私有(private)/protected。我们能否只恢复重载方法的一个/几个原始访问级别?在GCC4.4.0上,我尝试将基本方法置于protected访问之下,然后使用私有(private)访问继承它。当我尝试将访问级别恢复为公共(public)时,它起作用了!这是它应该如何工作吗?还是编译器上的错误?据我了解,恢复访问级别不能用于提升或降低成员的访问级别。代码片段:classbase{public:voidmethod(){}voidmethod(intx){}protected:voidmethod2(){}};classderive

c++ - 在基类中重载运算符 delete

来自C++标准(ISO/IEC14882:2003(E)),§12.5.4,关于重载operatordelete:Ifadelete-expressionbeginswithaunary::operator,thedeallocationfunction'snameislookedupinglobalscope.Otherwise,ifthedelete-expressionisusedtodeallocateaclassobjectwhosestatictypehasavirtualdestructor,thedeallocationfunctionistheonefoundbyth

c++ - 无法从派生类访问基类中的 protected 成员

这是我的代码:#include#include#includeusingnamespacestd;classroot{protected:intsize;double*array;public:virtual~root(){}virtualroot*add(constroot&)=0;virtualroot*sub(constroot&)=0;virtualistream&in(istream&,root&)=0;virtualintgetSize()const=0;virtualvoidsetSize(int);};classaa:publicroot{public:aa();aa(

c++ - 当基类提供时,派生类是否需要实现移动语义?

我看完了ThomasBecker's"C++RvalueReferences".我有几个关于右值和右值引用的问题。假设我有一个简单的数组类:templateMyArray{...T*m_ptr;//Pointertoelementssize_tm_count;//Countofelements};进一步假设它提供:#if(__cplusplus>=201103L)MyArray(MyArray&&t):m_ptr(std::move(t.m_ptr)),m_count(std::move(t.m_count)){t.m_ptr=NULL;t.m_count=0;}MyArrayoper

c++ - 防止派生类强制转换为基类

我有classRect{//stuff};和classSpecialRect:publicRect{private:operatorconstRect(){return*this;}//NoimplicitscaststoRectpublic://stuff};SpecialRect继承了Rect的所有属性和方法,除了我想避免从SpecialRect到基类Rect的非显式转换。在代码中SpecialRectoneSpecial;RectaRect=oneSpecial;//Iwantthistonotcompile.(toremind-metodeclareaRectasSpecial